草庐IT

Java OutOfMemoryError 奇怪的行为

全部标签

c++ - 遗漏是未定义的行为吗?

标准说:1.3.24[defns.undefined]undefinedbehaviorbehaviorforwhichthisInternationalStandardimposesnorequirements[Note:UndefinedbehaviormaybeexpectedwhenthisInternationalStandardomitsanyexplicitdefinitionofbehaviororwhenaprogramusesanerroneousconstructorerroneousdata.Permissibleundefinedbehaviorrangesf

c++ - if 语句中的函数名以一种奇怪的方式转换

使用此代码(有效的C++11):#include#includeboolmy_awesome_func(intparam){return(param>1);}intmain(intargc,charconst*argv[]){fprintf(stderr,"typeofmy_awesome_func:%s\n",typeid(my_awesome_func).name());if(my_awesome_func){fprintf(stderr,"WHAT???\n");}return0;}问题在if语句中。虽然typeid返回一些看起来像FbiE的东西(我认为这是函数类型的gcc语言)

c++ - std::pow 不同指数的行为非常不同

我目前正在尝试优化一些代码,其中50%的时间花费在std::pow()上。我知道指数将始终为正整数,而底数将始终为区间(0,1)中的double。为了好玩,我写了一个函数:inlinedoubleint_pow(doublebase,intexponent){doubleout=1.0;for(inti=0;i我正在编译:>g++fast-pow.cpp-O3--std=c++11我在(0,1)之间生成了1亿个double,并比较了(1)std::pow(2)我自制的int_pow函数的时间以及(3)直接乘法。这是我的计时程序的草图(这是一个非常快速的组合测试):voidtime_me

c++ - 是否可以根据作用域改变函数的行为?

我想创建类似于rust的东西unsafeC++中的作用域。我的想法是我有一些函数执行检查次数。例如:voidcheck(){if(...)throwexception(...);}voidfoo(){check();//dosomework}现在,我希望能够在不执行这些检查的情况下使用或(在不同的上下文中)调用函数foo()。理想情况下,它看起来像这样:foo();//callfooandperformchecksunsafe{foo();//callfoowithoutchecks}我的问题是,是否有可能在编译时实现这样的目标?是否可以通过check函数在它被调用的范围内以某种方式检

c++ - 如何在函数参数初始化中捕获未定义的行为

以下代码在clang++中有效,但在g++中会崩溃#include#includetemplatedoubleabs_sum(doublecurrent_sum,Iteratorit,Iteratorit_end){if(it==it_end)returncurrent_sum;returnabs_sum(current_sum+std::abs(*it),++it,it_end);}intmain(intargc,char**argv){std::vectorvalues{1.0,2.0,-5};std::cout罪魁祸首原来是这一行:returnabs_sum(current_su

c++ - 奇怪的声明(模板)。 C++

我如何理解此处声明的内容:(这是从thisforum上的另一篇文章中摘录的)templatestaticchar(&f(ChT*))[1];我是这样读的:静态函数模板f用(ChT*)调用,但我无法理解为什么有地址运算符以及为什么有数组?我仍在学习如何理解C++声明,所以请慢慢仔细地解释这一点。 最佳答案 使用一些类型定义:typedefchar(&arrayref_t)[1];这是对字符数组的引用。该数组只有一个元素。typedefChTtmpl_t;这是一个模板类,使用“指向int类的Fallback成员的指针”类型和指向x的成员

c++ - 帮助处理奇怪的内存行为。在我的大脑和代码中寻找漏洞

过去几天我一直在努力寻找我们正在开发的程序中的内存泄漏。首先,我尝试使用一些检漏仪。解决了一些问题后,他们再也没有发现任何泄漏。但是,我还使用perfmon.exe监控我的应用程序。PerformanceMonitor报告说,当使用该应用程序时,“私有(private)字节数”和“工作集-私有(private)字节数”正在稳步上升。对我来说,这表明程序运行的时间越长,使用的内存就越多。然而,内部资源似乎很稳定,所以这对我来说听起来像是泄漏。程序正在运行时加载DLL。我怀疑这些泄漏或它们发生在该库中的任何内容,并在卸载库时被清除,因此它们不会被检漏仪检测到。我同时使用DevPartner

c++ - 指针映射中的默认值 nullptr 是否定义了行为?

下面的代码似乎总是遵循真正的分支。#include#includeclassTestClass{//implementation}intmain(){std::mapTestMap;if(TestMap[203]==nullptr){std::cout它是指向nullptr的未初始化指针的定义行为,还是我的编译器的产物?如果不是,我如何确保以下代码的可移植性?目前,我正在使用类似的逻辑为logfile返回正确的单例实例:#include#includeclassLog{public:staticLog*get_instance(std::stringpath);protected:Lo

c++ - 是否有 C++ 中实现定义行为的完整列表?

我正在回复对我的回答的评论:Cjobinterview-castingandcomparing并发现我找不到C++认为的“实现定义的行为”的完整列表。我知道这类事情有3类:未定义的行为、实现定义的行为和未指定的行为;然而,似乎大多数讨论都围绕未定义的行为展开,而当讨论实现定义的行为时,最多只会给出一个例子。总的来说,我倾向于编写大量进入该区域的代码,并且我知道会发生什么样的行为;我仍然希望能够明智地评论它的有效性。我还想指出,我认为在运营社区中存在很多未定义的误诊,而实际上平台已经很好地定义了这些误诊。请注意,我对给定平台如何选择定义此类行为不太感兴趣,而是希望列出属于C++标准定义的

c++ - 这是模板的正确行为吗?

templateblahfunc(blehp){//Dosomething}intmain(){doubled=1.111;inti=func(d);//#1intj=func(d);//#2//....}在这个例子中,func的实例#1和#2都在编译,但我不确定什么是正确的,以及为什么。有人可以解释为什么#1是正确的,并可能提供一些背景吗? 最佳答案 是的,这是正确的行为。案例1——类型推导func(d);这使用templatetypededuction确定bleh的类型。Inordertoinstantiateafunction